package cn.openea.perpartner.meily.web.service;

import cn.openea.perpartner.common.core.web.domain.AjaxResult;
import cn.openea.perpartner.meily.web.entity.GroupBuying;
import cn.openea.perpartner.meily.web.entity.dto.GroupBuyingDTOFactory;
import cn.openea.perpartner.meily.web.entity.dto.GroupDto;
import com.baomidou.mybatisplus.extension.service.IService;

import java.text.ParseException;
import java.util.List;

/**
 * (GroupBuying)表服务接口
 *
 * @author rains
 * @since 2023-02-06 17:04:37
 */
public interface IGroupBuyingService extends IService<GroupBuying> {

    /**
     * 发布团购
     * @param groupBuying 实例对象
     * @return 是否成功
     */
    AjaxResult publish(GroupBuying groupBuying) throws ParseException;

    /**
     * 结束团购（只修改状态）
     * @param groupBuying 实例对象
     * @return 实例对象
     */
    AjaxResult finish(GroupBuying groupBuying);

    /**
     * 查询团购详情
     * @param id
     * @return 实例对象
     */
    AjaxResult queryById(String id);

    /**
     * 获取正在进行中的拼团列表
     * @param groupDto 实例对象
     * @return 实例对象
     */
    AjaxResult getSimilarGroups(GroupDto groupDto);

    /**
     * 获取我发布的团购列表---分页
     * @param groupDto
     * @return
     */
    List<GroupBuying> getPublishGroupPurchaseList(GroupDto groupDto);

    /**
     * 获取我发布的团购总数
     * @param groupDto
     * @return
     */
    long getPublishGroupPurchaseNum(GroupDto groupDto);

    /**
     * 获取我参与的团购列表-暂时无用
     * @param groupDto
     * @return
     */
    List<GroupBuying> getJoinGroupPurchaseList(GroupDto groupDto);

    /**
     * 获取我参与的团购总数-暂时无用
     * @param groupDto
     * @return
     */
    AjaxResult getJoinGroupPurchaseNum(GroupDto groupDto);

    /**
     * 更新团购信息-后台使用
     * @param groupBuying 实例对象
     * @param BuyQuantity 购买数量
     * @return 实例对象
     */
    AjaxResult update(GroupBuying groupBuying, String BuyQuantity);

    /**
     * 新增-后台使用
     * @param groupBuying 实体对象
     * @return 新增结果
     */
    boolean insert(GroupBuying groupBuying);

    /**
     * 获取当前月已结束的拼团记录-后台使用
     * @return
     */
    List<GroupBuying> getCurrentMonthFinishList();

    /**
     * 获取上个月已结束的拼团记录-后台使用
     * @return
     */
    List<GroupBuying> getLastMonthFinishList();

    /**
     * 新增团购销售记录
     * @param id id
     * @param customerNum 参与团购的人数 增量
     * @param usedQuantity 已团购的商品数量 增量
     */
    void addPurchaseRecord(String id, int customerNum, int usedQuantity);

    /**
     * 获取团长的团购详情
     * @param initiatorId id 发起人编号/团长
     */
    GroupBuyingDTOFactory.GroupBuyingStatisticsDto getPublishGroupDataByInItiatorId(String initiatorId);
}
